package com.icecola.d9_tz;

import java.util.concurrent.atomic.AtomicInteger;

public class MyRunnable2 implements Runnable {
    // 整数修改的乐观锁，基于原子类实现的
    private AtomicInteger count = new AtomicInteger();

    @Override
    public void run() {
        // 需要把当前count取出来再加
        // 100次
        for (int i = 0; i < 100; i++) {
            String name = Thread.currentThread().getName();
            System.out.println(name + "count ====> " + count.incrementAndGet());
            // cas算法拆解
            //    public final int incrementAndGet() {
                        // this ：当前原子对象 VALUE ：value的地址值 1：对数据+1
            //        return U.getAndAddInt(this, VALUE, 1) + 1;
            //    }

            //    @HotSpotIntrinsicCandidate
            //    public final int getAndAddInt(Object o, long offset, int delta) {
            //        int v;
            //        do {
                        // o 原子对象 offset 原子对象地址
            //            v = getIntVolatile(o, offset);
            //        } while (!weakCompareAndSetInt(o, offset, v, v + delta));
            //        return v;
            //    }

            //    @HotSpotIntrinsicCandidate
            //    public final boolean weakCompareAndSetInt(Object o, long offset,
            //                                        期待的旧值      int expected,
            //                                        修改后的值      int x) {
                        //c语言方法去修改 去原子对象地址查真实值与expected比较，相等返回true，否则false
            //        return compareAndSetInt(o, offset, expected, x);
            //    }

        }


    }
}
